<?php
namespace app\custom_user\logic;

use app\custom_user\model\UserSession;
use app\custom_user\model\UserModel;
use think\Db;


class UserOutsideLogic extends UserLogic
{
    protected $table="ue_user_outside";
    /**
     * 通过第三方平台提供的用户信息创建新的用户
     * @param array $data 创建用户的数据(必须有除了password之外的必填字段,比如username)
     */
    public function createOutsideUser($data,$outside_id,$source,$type){
        if(!isset($data["password"])){
            $data["password"]=rand(100000,999999);
        }
        $um=new UserModel();
        $user=$um->createUser($data);
        if(!$user){
            $this->error=$um->getError();
            return false;
        }
        UserSession::set($user);
        $result=Db::table($this->table)->insert([
            "user_id"=>$user["id"],
            "source"=>$source,
            "outside_type"=>$type,
            "outside_id"=>$outside_id,
            "create_time"=>time()
        ]);
        if($result===false){
            $this->error="绑定失败";
            return false;
        }
        return $user;
    }
    /**
     * 将第三方用户与现有用户绑定
     * @param array $user 用户数据
     * @param array $where 搜索条件
     * @param array $password 用户密码
     */
    public function bindOutsideUser($user_id,$outside_id,$source,$type)
    {
        $result=Db::table($this->table)->insert([
            "user_id"=>$user_id,
            "source"=>$source,
            "outside_type"=>$type,
            "outside_id"=>$outside_id,
            "create_time"=>time()
        ]);
        if($result===false){
            $this->error="绑定失败";
            return false;
        }
        return true;
    }
    /**
     * 使用第三方用户登录
     * @param array $data 通过code获取到的数据
     */
    public function loginOutsideUser($outside_id)
    {
        $outside=Db::table($this->table)->where(["outside_id"=>$outside_id])->order("create_time desc")->find();
        if(!$outside){
            $this->error="第三方用户不存在";
            return false;
        }
        $um=new UserModel();
        $user=$um->db()->where(["id"=>$outside["user_id"]])->find();
        if(!$user){
            $this->error="找不到用户";
            return false;
        }
        $um->loginUser($user);
        $user=$user->getData();
        UserSession::set($user);
        return $user;
    }
}
